LLM Infra 接口功能调研

调研时间2024.10.8

1. chat接口

1.1 输入

openai: https://platform.openai.com/docs/api-reference/chat/create
vllm: https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html

OpenAI Chat 参数名称 参数含义 VLLM(是否支持) Moffett Tuili
messages 包含到目前为止对话的消息列表。根据您使用的模型,支持不同类型的消息(模态),如文本、图像和音频 文本
model 要使用的模型的ID。详见模型端点兼容性表,了解哪些模型适用于Chat API。
store 是否存储此聊天完成请求的输出,以用于我们的模型蒸馏或评估产品。默认为 false
metadata 开发者定义的标签和值,用于在仪表板中过滤完成结果。
frequency_penalty 介于 -2.02.0 之间的数字。正值会根据新令牌在文本中出现的频率对其进行惩罚,降低模型逐字重复同一行的可能性。 server start
logit_bias 修改指定令牌在完成中出现的可能性。接受一个JSON对象,将令牌(由其标记器中的令牌ID指定)映射到 -100100 之间的偏差值。
logprobs 是否返回输出令牌的对数概率。如果为 true,将在消息内容中返回每个输出令牌的对数概率。默认值为 false
top_logprobs 指定在每个令牌位置返回的最可能的令牌数量及其关联的对数概率。必须将 logprobs 设置为 true 才能使用此参数。 ✅ prompt_logprobs
max_tokens 已弃用。聊天完成中可生成的最大令牌数。建议使用 max_completion_tokens 替代,且与 o1 系列模型不兼容。
max_completion_tokens 为完成生成的令牌设定上限,包括可见的输出令牌和推理令牌。 ✅max_tokens server start
n 为每个输入消息生成的聊天完成选项数量。默认值为 1
presence_penalty 介于 -2.02.0 之间的数字。正值会根据新令牌是否出现在文本中来惩罚它们,增加模型讨论新主题的可能性。 server start
response_format 指定模型必须输出的格式的对象。可用于启用结构化输出,确保模型匹配您提供的 JSON 架构。
seed 该功能处于 Beta 阶段。如果指定,我们的系统将尽最大努力进行确定性采样,使得具有相同种子和参数的重复请求应返回相同的结果。
service_tier 指定用于处理请求的延迟等级。对于订阅了规模等级服务的客户,此参数相关。 server start
stop 最多可指定 4 个序列,API 在生成这些序列时将停止生成进一步的令牌。
stream 如果设置为 true,将以类似于 ChatGPT 的方式发送部分消息增量。默认值为 false
stream_options 流响应的选项。仅在设置 stream: true 时使用此参数。 默认为:true 默认为:true
temperature 使用的采样温度,介于 02 之间。较高的值如 0.8 会使输出更随机,而较低的值如 0.2 会使其更集中和确定性。默认值为 1 server start
top_p 另一种采样方法,称为核采样,模型考虑具有累积概率质量为 top_p 的令牌结果。我们通常建议修改此值或 temperature,但不同时修改两者。默认值为 1
tools 模型可能调用的工具列表。目前,仅支持函数作为工具。用于提供模型可能为其生成 JSON 输入的函数列表。最多支持 128 个函数。
tool_choice 控制模型调用的工具(如果有)。none 表示模型不会调用任何工具,auto 表示模型可以选择生成消息或调用一个或多个工具。
parallel_tool_calls 是否在使用工具期间启用并行函数调用。默认值为 true
user 唯一标识您的终端用户的标识符,这有助于 OpenAI 监控和检测滥用。
function_call 已弃用,建议使用 tool_choice 代替。
functions 已弃用,建议使用 tools 代替。
VLLM Chat补充参数 参数含义 Moffett Tuili
best_of 从提示中生成的输出序列数量。从这些 best_of 序列中,返回前 n 个序列。best_of 必须大于或等于 n。当 use_beam_search 为 True 时,这被视为束搜索的宽度。默认情况下,best_of 设置为 n。
repetition_penalty 根据新令牌是否出现在提示和已生成文本中来对其进行惩罚的浮点数。值 > 1 鼓励模型使用新令牌,值 < 1 鼓励模型重复令牌。 server start
min_p 相对于最可能令牌的概率,表示要考虑的令牌的最小概率的浮点数。必须在 [0, 1] 之间。设置为 0 以禁用此功能。
stop_token_ids 当生成这些令牌时停止生成的令牌列表。除非停止令牌是特殊令牌,否则返回的输出将包含停止令牌。
include_stop_str_in_output 是否在输出文本中包含停止字符串。默认值为 False。
ignore_eos 是否忽略 EOS(结束符)令牌,并在生成 EOS 令牌后继续生成。
min_tokens 在可以生成 EOS 或 stop_token_ids 之前,每个输出序列要生成的最小令牌数。
detokenize 是否对输出进行解码。默认值为 True。
skip_special_tokens 是否跳过输出中的特殊令牌。
spaces_between_special_tokens 是否在输出中的特殊令牌之间添加空格。默认值为 True。
logits_processors 根据先前生成的令牌(可选地以提示令牌作为第一个参数)修改 logits 的函数列表。
truncate_prompt_tokens 如果设置为整数 k,将只使用提示中的最后 k 个令牌(即左截断)。默认值为 None(即不截断)。
guided_decoding 如果提供,引擎将根据这些参数构建一个引导解码的 logits 处理器。默认值为 None。
allowed_token_ids 如果提供,引擎将构建一个 logits 处理器,只保留给定令牌 ID 的分数。默认值为 None。

1.2 输出

1.2.1 非流式输出的回复体

openai: https://platform.openai.com/docs/api-reference/chat/object

参数名 解释 Moffett Tuili
id 一个唯一的聊天完成标识符。
choices 聊天完成选项的列表。如果 n 大于 1,可能会有多个选项。
choices[].finish_reason 模型停止生成令牌的原因。如果模型达到自然停止点或提供的停止序列,则为 "stop";如果达到请求中指定的最大令牌数,则为 "length";如果由于内容过滤器的标记而省略了内容,则为 "content_filter";如果模型调用了工具,则为 "tool_calls";如果模型调用了函数(已弃用),则为 "function_call"。
choices[].index 选项在选项列表中的索引。
choices[].message 模型生成的聊天完成消息。
choices[].message.content 消息的内容,字符串或 null。
choices[].message.refusal 模型生成的拒绝消息,字符串或 null。
choices[].message.tool_calls 模型生成的工具调用列表,例如函数调用。
choices[].message.tool_calls[].id 工具调用的 ID。
choices[].message.tool_calls[].type 工具的类型。目前仅支持 "function"。
choices[].message.tool_calls[].function 模型调用的函数。
choices[].message.role 此消息作者的角色。
choices[].message.function_call (已弃用) 已弃用,被 tool_calls 替代。模型生成的应调用的函数的名称和参数。
choices[].message.function_call.name 要调用的函数的名称。
choices[].message.function_call.arguments 以 JSON 格式生成的调用函数的参数。请注意,模型并不总是生成有效的 JSON,可能会幻觉出您的函数架构中未定义的参数。在调用函数之前,请在代码中验证参数。
choices[].logprobs 选项的对数概率信息,可能为对象或 null。
choices[].logprobs.content 带有对数概率信息的消息内容令牌列表,可能为数组或 null。
choices[].logprobs.content[].token 令牌。
choices[].logprobs.content[].logprob 该令牌的对数概率,如果它在前 20 个最可能的令牌中。否则,使用值 -9999.0 表示该令牌非常不可能。
choices[].logprobs.content[].bytes 表示令牌的 UTF-8 字节表示形式的整数列表。在字符由多个令牌表示且必须组合其字节表示形式以生成正确的文本表示形式的情况下非常有用。如果令牌没有字节表示形式,则可能为 null。
choices[].logprobs.refusal 带有对数概率信息的消息拒绝令牌列表,可能为数组或 null。
choices[].logprobs.refusal[].token 令牌。
choices[].logprobs.refusal[].logprob 该令牌的对数概率,如果它在前 20 个最可能的令牌中。否则,使用值 -9999.0 表示该令牌非常不可能。
choices[].logprobs.refusal[].bytes 表示令牌的 UTF-8 字节表示形式的整数列表。在字符由多个令牌表示且必须组合其字节表示形式以生成正确的文本表示形式的情况下非常有用。如果令牌没有字节表示形式,则可能为 null。
choices[].logprobs.top_logprobs 在此令牌位置最可能的令牌及其对数概率的列表。在极少数情况下,返回的 top_logprobs 可能少于请求的数量。
choices[].logprobs.top_logprobs[].token 令牌。
choices[].logprobs.top_logprobs[].logprob 该令牌的对数概率,如果它在前 20 个最可能的令牌中。否则,使用值 -9999.0 表示该令牌非常不可能。
choices[].logprobs.top_logprobs[].bytes 表示令牌的 UTF-8 字节表示形式的整数列表。在字符由多个令牌表示且必须组合其字节表示形式以生成正确的文本表示形式的情况下非常有用。如果令牌没有字节表示形式,则可能为 null。
created 聊天完成创建时的 Unix 时间戳(以秒为单位)。
model 用于聊天完成的模型。
service_tier 用于处理请求的服务层。如果在请求中指定了 service_tier 参数,则仅包含此字段。可能为字符串或 null。
system_fingerprint 表示模型运行的后端配置的指纹。可与 seed 请求参数一起使用,以了解可能影响确定性的后端更改何时发生。
object 对象类型,始终为 chat.completion
usage 完成请求的使用统计信息。
usage.completion_tokens 生成的完成内容中的令牌数量。
usage.prompt_tokens 提示中的令牌数量。
usage.total_tokens 请求中使用的令牌总数(提示 + 完成)。
usage.completion_tokens_details 完成内容中使用的令牌的详细分解。
usage.prompt_tokens_details 提示中使用的令牌的详细分解。
usage.prompt_tokens_details.audio_tokens 提示中存在的音频输入令牌。
usage.prompt_tokens_details.cached_tokens 提示中存在的缓存令牌。
1.2.2 流式输出的回复体

openai: https://platform.openai.com/docs/api-reference/chat/object

参数名 解释 Moffett Tuili
id 一个唯一的聊天完成标识符。每个块都有相同的 ID。
choices 聊天完成选项的列表。如果 n 大于 1,则可能包含多个元素。如果您在请求中设置了 stream_options: {"include_usage": true},则对于最后一个块,该列表可能为空。
choices[].delta 流式模型响应生成的聊天完成增量。
choices[].delta.content 块消息的内容。
choices[].delta.function_call(已弃用) 已弃用并被 tool_calls 取代。模型生成的应该被调用的函数的名称和参数。
choices[].delta.function_call.name 要调用的函数名称。
choices[].delta.function_call.arguments 调用函数的参数,由模型以 JSON 格式生成。请注意,模型并不总是生成有效的 JSON,可能会产生未在您的函数架构中定义的参数。在调用函数之前,请在代码中验证参数。
choices[].delta.tool_calls 工具调用的数组。
choices[].delta.tool_calls[].index 工具调用的索引。
choices[].delta.tool_calls[].id 工具调用的 ID。
choices[].delta.tool_calls[].type 工具的类型。目前,仅支持 "function"
choices[].delta.tool_calls[].function 工具调用的函数信息。
choices[].delta.tool_calls[].function.name 要调用的函数名称。
choices[].delta.tool_calls[].function.arguments 调用函数的参数,由模型以 JSON 格式生成。请注意,模型并不总是生成有效的 JSON,可能会产生未在您的函数架构中定义的参数。在调用函数之前,请在代码中验证参数。
choices[].delta.role 此消息的作者角色。
choices[].delta.refusal 模型生成的拒绝消息。
choices[].logprobs 选项的对数概率信息。可能为对象或 null
choices[].logprobs.content 带有对数概率信息的消息内容令牌列表。可能为数组或 null
choices[].logprobs.content[].token 令牌。
choices[].logprobs.content[].logprob 该令牌的对数概率,如果它在前 20 个最可能的令牌中;否则,使用值 -9999.0 表示该令牌非常不可能。
choices[].logprobs.content[].bytes 表示令牌的 UTF-8 字节表示形式的整数列表。在字符由多个令牌表示且需要组合其字节表示形式以生成正确文本的情况下非常有用。如果令牌没有字节表示形式,则可能为 null
choices[].logprobs.top_logprobs 在此令牌位置最可能的令牌及其对数概率的列表。在极少数情况下,返回的 top_logprobs 可能少于请求的数量。
choices[].logprobs.top_logprobs[].token 令牌。
choices[].logprobs.top_logprobs[].logprob 该令牌的对数概率。
choices[].logprobs.top_logprobs[].bytes 表示令牌的 UTF-8 字节表示形式的整数列表。
choices[].logprobs.refusal 带有对数概率信息的消息拒绝令牌列表。可能为数组或 null
choices[].logprobs.refusal[].token 令牌。
choices[].logprobs.refusal[].logprob 该令牌的对数概率。
choices[].logprobs.refusal[].bytes 表示令牌的 UTF-8 字节表示形式的整数列表。
choices[].logprobs.refusal[].top_logprobs 在此令牌位置最可能的令牌及其对数概率的列表。
choices[].logprobs.refusal[].top_logprobs[].token 令牌。
choices[].logprobs.refusal[].top_logprobs[].logprob 该令牌的对数概率。
choices[].logprobs.refusal[].top_logprobs[].bytes 表示令牌的 UTF-8 字节表示形式的整数列表。
choices[].finish_reason 模型停止生成令牌的原因。如果模型达到自然停止点或提供的停止序列,则为 "stop";如果达到请求中指定的最大令牌数,则为 "length";如果由于内容过滤器的标记而省略了内容,则为 "content_filter";如果模型调用了工具,则为 "tool_calls";如果模型调用了函数(已弃用),则为 "function_call"
choices[].index 选项在选项列表中的索引。
created 聊天完成创建时的 Unix 时间戳(以秒为单位)。每个块都有相同的时间戳。
model 用于生成完成的模型。
service_tier 用于处理请求的服务层。如果在请求中指定了 service_tier 参数,则仅包含此字段。
system_fingerprint 此指纹表示模型运行的后端配置。可与 seed 请求参数一起使用,以了解可能影响确定性的后端更改何时发生。
object 对象类型,始终为 chat.completion.chunk
usage 一个可选字段,仅当您在请求中设置了 stream_options: {"include_usage": true} 时才会出现。当存在时,除最后一个块外,它包含一个 null 值,最后一个块包含整个请求的令牌使用统计信息。
usage.completion_tokens 生成的完成内容中的令牌数量。
usage.prompt_tokens 提示中的令牌数量。
usage.total_tokens 请求中使用的令牌总数(提示 + 完成)。

2. embedding 接口

2.1 输入\

openai: https://platform.openai.com/docs/api-reference/embeddings/create
vllm: https://docs.vllm.ai/en/latest/getting_started/examples/openai_embedding_client.html

参数名 解释 VLLM
input 必需。 要嵌入的输入文本,编码为字符串或令牌数组。要在单个请求中嵌入多个输入,请传递字符串数组或令牌数组。输入不得超过模型的最大输入令牌数(对于 text-embedding-ada-002 为 8192 个令牌),不能是空字符串,且任何数组必须不超过 2048 维。可参考用于计算令牌数的示例 Python 代码。
input 类型 可能的类型:
- string 将被转换为嵌入的字符串。
- array 将被转换为嵌入的字符串数组。
- array 将被转换为嵌入的整数数组。
- array 包含整数的数组数组,将被转换为嵌入。
model 必需。 要使用的模型的 ID。您可以使用 List models API 查看所有可用模型,或参阅我们的 模型概览 以获取它们的描述。
encoding_format 可选,默认值为 float 返回嵌入的格式。可以是 floatbase64
dimensions 可选。 结果输出嵌入应具有的维数。仅在 text-embedding-3 及更高版本的模型中支持。
user 可选。 表示您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用。 了解更多

2.2 输出

openai: https://platform.openai.com/docs/api-reference/embeddings/object

参数名 解释 VLLM
index 嵌入在嵌入列表中的索引。
embedding 嵌入向量,即浮点数列表。向量的长度取决于模型,如嵌入指南中所述。
object 对象类型,始终为 "embedding"。

3. 视觉生成接口

vllm 不支持

3.1 文生图输入

openai: https://platform.openai.com/docs/api-reference/images/create

参数名 解释
prompt 必需。所需图像的文本描述。对于 dall-e-2,最大长度为 1000 个字符;对于 dall-e-3,最大长度为 4000 个字符。
model 可选。默认为 dall-e-2。用于图像生成的模型。
n 可选。默认为 1。要生成的图像数量。必须在 110 之间。对于 dall-e-3,仅支持 n=1
quality 可选。默认为 standard。将要生成的图像质量。hd 会创建具有更精细细节和更高一致性的图像。此参数仅支持 dall-e-3
response_format 可选。默认为 url。生成的图像返回的格式。必须是 urlb64_json 之一。生成后的 URL 仅在 60 分钟内有效。
size 可选。默认为 1024x1024。生成图像的尺寸。对于 dall-e-2,必须是 256x256512x5121024x1024 之一。对于 dall-e-3 模型,必须是 1024x10241792x10241024x1792 之一。
style 可选。默认为 vivid。生成图像的风格。必须是 vividnatural 之一。vivid 使模型倾向于生成超真实和戏剧性的图像,natural 使模型生成更自然、较少超真实感的图像。此参数仅支持 dall-e-3
user 可选。表示您的终端用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。了解更多。
Returns 返回一个图像对象的列表。

3.2 图片编辑输入

openai: https://platform.openai.com/docs/api-reference/images/createEdit

参数名 解释
image 必需,类型为文件。要编辑的图像。必须是有效的 PNG 文件,小于 4MB,并且是正方形。如果未提供 mask,则图像必须具有透明度,将用于作为掩码。
prompt 必需,类型为字符串。所需图像的文本描述。最大长度为 1000 个字符。
mask 可选,类型为文件。一个额外的图像,其完全透明的区域(例如 alpha 为零的地方)指示应编辑图像的位置。必须是有效的 PNG 文件,小于 4MB,且与 image 具有相同的尺寸。
model 可选,类型为字符串。默认值为 dall-e-2。用于图像生成的模型。目前仅支持 dall-e-2
n 可选,类型为整数或 null。默认值为 1。要生成的图像数量。必须在 1 到 10 之间。
size 可选,类型为字符串或 null。默认值为 1024x1024。生成的图像大小。必须是 256x256512x5121024x1024 之一。
response_format 可选,类型为字符串或 null。默认值为 url。返回生成的图像格式。必须是 urlb64_json 之一。生成图像后的 URL 仅在 60 分钟内有效。
user 可选,类型为字符串。表示您的最终用户的唯一标识符,可帮助 OpenAI 监控和检测滥用。 了解更多

3.3 图片变化输入

openai: https://platform.openai.com/docs/api-reference/images/createVariation

参数名 解释
image **必填。**用于生成变体的基础图像。必须是有效的 PNG 文件,小于 4MB,并且是正方形。
model **可选。**默认值为 dall-e-2。用于图像生成的模型。目前仅支持 dall-e-2
n **可选。**默认值为 1。要生成的图像数量。必须在 1 到 10 之间。对于 dall-e-3,仅支持 n=1
response_format **可选。**默认值为 url。生成的图像返回的格式。必须是 urlb64_json 之一。生成图像后的 60 分钟内,URL 才有效。
size **可选。**默认值为 1024x1024。生成图像的大小。必须是 256x256512x5121024x1024 之一。
user **可选。**表示您的终端用户的唯一标识符,有助于 OpenAI 监控和检测滥用行为。 了解更多

3.4 输出

openai: https://platform.openai.com/docs/api-reference/images/object

参数名 解释
b64_json 如果 response_formatb64_json,则为生成的图像的 base64 编码的 JSON。
url 如果 response_formaturl(默认值),则为生成的图像的 URL。
revised_prompt 如果对提示进行了任何修改,则为用于生成图像的提示。

chat接口功能分析:

  1. chat 接口 支持修改模型参数,而不是模型启动时锁死,参数有:
    • frequency_penalty
    • max_completion_tokens
    • presence_penalty
    • temperature
    • top_p
    • logit_bias 修改分布偏差
  2. 功能参数:
    • logprobs bankend+tuili层面
    • top_logprobs bankend+tuili层面
    • n bankend+tuili层面
    • response_format 实现方式待定
    • seed 实现方式待定
    • stop tuili层面
    • tools bankend+tuili+llm层面 待定
    • tool_choice bankend+tuili+llm层面 待定
  3. 根据model name 框架内加载